package org.gwt.client.vista;

import org.gwt.client.controlador.VistaListener;
import org.gwt.client.vista.dialogos.DialogoAcerca;
import org.gwt.client.vista.dialogos.DialogoPlano;
import org.gwt.client.vista.dialogos.DialogoPunto3D;
import org.gwt.client.vista.dialogos.DialogoVector3D;

import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.google.gwt.user.client.ui.RootPanel;

public class TutorVista {

	private Viewport contenedorPrincipal;
	private BorderLayout contenedor;
	private BorderLayoutData layoutDataDibujo, layoutDataAyuda,
			layoutDataEncabezado, layoutDataBarraDibujo;
	private BarraDibujo barraDibujo;
	private ContentPanel panelAyuda;
	private PanelEncabezado panelEncabezado;
	private PanelDibujo panelDibujo;
	private DialogoPunto3D dialogoPunto3D;
	private DialogoVector3D dialogoVector3D;
	private DialogoPlano dialogoPlano;
	private DialogoAcerca dialogoAcerca;
	private boolean collapse;

	private VistaListener listener;

	public TutorVista() {
		collapse = true;
		// Contenedor
		contenedorPrincipal = new Viewport();
		contenedorPrincipal.setStyleName("fondo");
		contenedor = new BorderLayout();
		barraDibujo = new BarraDibujo();
		panelAyuda = new ContentPanel();
		panelDibujo = new PanelDibujo();
		contenedorPrincipal.setLayout(contenedor);
		contenedorPrincipal.setStyleAttribute("padding", "10px");

		// LayoutEncabezado
		panelEncabezado = new PanelEncabezado();
		contenedorPrincipal.setStyleName("fondo");
		layoutDataEncabezado = new BorderLayoutData(LayoutRegion.NORTH, 42.0f);
		layoutDataEncabezado.setMargins(new Margins(-10, -10, 0, -10));

		// LayoutBarraDibujo
		layoutDataBarraDibujo = new BorderLayoutData(LayoutRegion.WEST, 60.0f);
		layoutDataBarraDibujo.setMargins(new Margins(0, 5, 0, 0));
		barraDibujo.setSpacing(5);
		barraDibujo.setSize("auto", "auto");

		// LayoutAyuda
		layoutDataAyuda = new BorderLayoutData(LayoutRegion.EAST, 250.0f);
		layoutDataAyuda.setCollapsible(true);
		layoutDataAyuda.setMargins(new Margins(0, 0, 0, 5));
		panelAyuda.setHeading("Ayuda");

		// Dibujar
		layoutDataDibujo = new BorderLayoutData(LayoutRegion.CENTER);

		// PANEL DIBUJO AÑADIDO
		contenedorPrincipal.add(panelDibujo, layoutDataDibujo);

		// PANEL TITULO AÑADIDO
		contenedorPrincipal.add(panelEncabezado, layoutDataEncabezado);

		// BARRA DIBUJO AÑADIDA
		contenedorPrincipal.add(barraDibujo, layoutDataBarraDibujo);

		// PANEL AYUDA AÑADIDO
		contenedorPrincipal.add(panelAyuda, layoutDataAyuda);

		setDeshabilitado();
		RootPanel rootPanel = RootPanel.get();
		rootPanel.add(contenedorPrincipal);
		panelDibujo.escalar();
	}

	public PanelDibujo getPanelDibujo() {
		return panelDibujo;
	}

	public PanelEncabezado getPanelEncabezado() {
		return panelEncabezado;
	}

	public DialogoPunto3D getDialogoPunto3D() {
		return dialogoPunto3D;
	}

	public DialogoVector3D getDialogoVector3D() {
		return dialogoVector3D;
	}

	public DialogoPlano getDialogoPlano() {
		return dialogoPlano;
	}

	public BorderLayout getContenedor() {
		return contenedor;
	}

	public boolean getCollapse() {
		return collapse;
	}

	public void setCollapse(boolean estado) {
		collapse = estado;
	}

	public void setTituloProblema(String tituloProblema) {
		getPanelDibujo().getTituloProblema().setHeading(tituloProblema);
	}

	public void setTextoProblema(String textoProblema) {
		getPanelDibujo().getTextoProblema().setText(textoProblema);
	}

	public void setDeshabilitado() {
		barraDibujo.setEnabled(false);
		panelDibujo.setEnabled(false);
		// panelDibujo.getProblema().setEnabled(false);
		// panelDibujo.getEcuaciones().setEnabled(false);
		panelAyuda.setEnabled(false);
	}

	public void setInicioHabilitado() {
		this.contenedor.collapse(LayoutRegion.EAST);
		barraDibujo.setEnabled(true);
		panelDibujo.setEnabled(true);
		panelDibujo.getTextFieldEcuacion().setEnabled(false);
		panelDibujo.getBotonOk().setEnabled(false);
	}

	public void setHabilitado() {
		barraDibujo.setEnabled(true);
		panelDibujo.setEnabled(true);
		panelAyuda.setEnabled(true);
	}

	public void muestraDialogoPunto() {
		dialogoPunto3D = new DialogoPunto3D();
		dialogoPunto3D.addBotonListener(listener);
		dialogoPunto3D.setModal(true);
		dialogoPunto3D.show();
	}

	public void muestraDialogoVector() {
		dialogoVector3D = new DialogoVector3D();
		dialogoVector3D.addBotonListener(listener);
		dialogoVector3D.setModal(true);
		dialogoVector3D.show();
	}

	public void muestraDialogoPlano() {
		dialogoPlano = new DialogoPlano();
		dialogoPlano.addBotonListener(listener);
		dialogoPlano.setModal(true);
		dialogoPlano.show();
	}

	public void muestraDialogoAcerca() {
		dialogoAcerca = new DialogoAcerca();
		dialogoAcerca.setModal(true);
		dialogoAcerca.show();
	}

	public void confguracionProblema2() {

	}

	public void confguracionProblema3() {

	}

	public void addListener(VistaListener listener) {
		panelEncabezado.addListener(listener);
		panelEncabezado.addBotonListener(listener);
		barraDibujo.addListener(listener);
		barraDibujo.addBotonListener(listener);
		this.listener = listener;
		panelDibujo.addBotonListener(listener);
		panelDibujo.addCanvasListener(listener);
	}

	public void removeListener(VistaListener listener) {
		barraDibujo.removeListener(listener);
	}

}
